import {
  showInformationMessage,
  createrProjectInfoMsg,
  createrProjectNullMsg,
} from "@ap/util/vscode/message";
import getFilePath from "@ap/util/vscode/getFilePath";
import * as vscode from "vscode";
import { arenaErrorMsg } from "../vscode/errorMsg";
import { ConfigurationItem, ConfigurationKey } from "../vscode/setInsConfig";
import { CommandId } from "@ap/command";
import { openLoginSetting } from "@ap/user/accountsLogin";
/**
 * 异步创建一个新的项目。
 *
 * 此函数首先检查是否可以创建项目信息消息，如果可以，则继续执行。
 * 接着，它尝试获取工作区的文件夹路径。如果无法获取到有效的路径，则函数终止执行。
 * 如果获取到有效的工作区路径，函数将创建一个终端，并将其工作目录设置为工作区路径。
 * 最后，函数将在延迟100毫秒后，在终端中发送命令来初始化一个新的Arena项目。
 */
export default async function createProject() {
  // 获取工作区的文件夹的路径。
  const workspaceFolder = getFilePath();
  // 如果没有找到工作区文件夹，则终止执行
  if (!workspaceFolder) {
    showInformationMessage(arenaErrorMsg.OPEN_WORKSPACE);
    vscode.commands.executeCommand(CommandId.ap_files_focusFilesExplorer);
    return;
  }

  // 创建一个ArenaPro专用终端
  const arenaTerminal = vscode.window.createTerminal({
    cwd: workspaceFolder,
    name: "ArenaPro",
    message:
      "欢迎使用ArenaPro Creator！程序正在创建中，请耐心等待。如遇问题，请访问：https://docs.box3lab.com/arenapro/bestPractices/nodejsTest.html 获取帮助。",
    iconPath: vscode.Uri.parse(
      "https://static.codemao.cn/pickduck/HkblwwDdC.png?hash=FjCNOjP--1CsvhtLZVOTP2kWcRX2",
    ),
  });
  // 显示终端
  arenaTerminal.show();
  // 延迟100毫秒后，在终端中发送初始化项目的命令
  setTimeout(async () => {
    // 如果用户配置了安装脚本，则使用用户配置的安装脚本
    const script = vscode.workspace
      .getConfiguration(ConfigurationItem.NODEJS_TOOL)
      .get(ConfigurationKey.INSTALL_SCRIPT);
    if (script) {
      arenaTerminal.sendText(script as string, true);
      return;
    }
    if (await createrProjectNullMsg()) {
      openLoginSetting();
    }
  }, 100);
}
